﻿'''
题目描述
存在一种虚拟IPv4地址，由4小节组成，每节的范围为0~255，以#号间隔，虚拟IPv4地址可以转换为一个32位的整数，例如：
128#0#255#255，转换为32位整数的结果为2147549183（0x8000FFFF）
1#0#0#0，转换为32位整数的结果为16777216（0x01000000）
现以字符串形式给出一个虚拟IPv4地址，限制第1小节的范围为1128，即每一节范围分别为(1128)#(0255)#(0255)#(0~255)，要求每个IPv4地址只能对应到唯一的整数上。如果是非法IPv4，返回invalid IP
输入描述
输入一行，虚拟IPv4地址格式字符串
输出描述
输出一行，按照要求输出整型或者特定字符
示例1
输入
100#101#1#5
输出
1684340997
说明
示例2
输入
1#2#3
输出
invalid IP
说明
解题思路
虚拟IPv4地址由四个小节组成，每个小节用#号分隔。在这个虚拟版本中用#替代。每个小节代表一个整数，范围从0到255，但题目中特别
指出第一小节的范围应为1到128。地址的正确形式应该是四部分，例如 1#2#3#4。如果格式不正确或数值不在指定范围内，则视为非法
IPv4，输出“invalid IP”。
解题注意事项
异常处理：
确保输入的每一部分（小节）都是数字。
确保没有空的小节，例如1##3#4。
处理任何非数字字符，例如a#b#c#d。
检查是否每个部分都严格为数字，并且没有前导零（除了单独的0），例如01#01#01#01应被视为非法。
范围验证：
第一小节必须在1到128之间。
其余三小节必须在0到255之间。
任何超出这些范围的值都应该导致输出“invalid IP”。
格式正确性：
确保地址严格由四个数字小节组成，多于或少于四部分都应视为无效。
'''
#输入描述：输入一行，虚拟IPv4地址格式字符串
#输出描述：输出一行，按照要求输出整型或者特定字符

#该题主要考查非法输入判断
#读取输入并存储：100#101#1#5
input_str = input()
addres = input_str.split('#')
#如果输入是非法IPv4，返回invalid IP,注意根据用例调整：
if len(addres) != 4:
    print('invalid IP')
else:   
    #遍历每部分
    valid = True    #标志
    for section in addres:
        #判断是否为空或是数字
        if len(section) == 0 or (not section.isdigit()):
            valid = False
            break
        #判断是否有前导0，注意长度大于1
        if len(section) > 1 and section[0] == 0:
            valid = False
            break
    if not valid:
        print('invalid IP')
    #继续判断每部分是否在数字范围内
    else:
        for i in range(4):
            if i == 0 and not (int(addres[i]) <= 128 and int(addres[i]) >= 1):
                valid = False
                break
            elif not (int(addres[i]) <= 255 and int(addres[i]) >= 0):
                valid = False
                break
            else:   #转换为整数
                result = 0
                for i in range(len(addres)):
                    result += int(addres[i]) * 256 ** (3 - i)
                #输出转换后的结果
                print(result)
                break
        if not valid:
            print('invalid IP')



